<html>
 <head>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"/>
  <title>
   HuRongxing: R中面向对象编程方法  | 数螺 | NAUT IDEA
  </title>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" rel="stylesheet"/>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
  <style type="text/css">
   #xmain img {
                  max-width: 100%;
                  display: block;
                  margin-top: 10px;
                  margin-bottom: 10px;
                }

                #xmain p {
                    line-height:150%;
                    font-size: 16px;
                    margin-top: 20px;
                }

                #xmain h2 {
                    font-size: 24px;
                }

                #xmain h3 {
                    font-size: 20px;
                }

                #xmain h4 {
                    font-size: 18px;
                }


                .header {
	           background-color: #0099ff;
	           color: #ffffff;
	           margin-bottom: 20px;
	        }

	        .header p {
                  margin: 0px;
                  padding: 10px 0;
                  display: inline-block;  
                  vertical-align: middle;
                  font-size: 16px;
               }

               .header a {
                 color: white;
               }

              .header img {
                 height: 25px;
              }
  </style>
  <script src="http://cdn.bootcss.com/jquery/3.0.0/jquery.min.js">
  </script>
  <script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript">
   MathJax.Hub.Config({
          tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]},
          TeX: {equationNumbers: {autoNumber: "AMS"}}
        });
  </script>
  <script src="http://nautstatic-10007657.file.myqcloud.com/static/css/readability.min.js" type="text/javascript">
  </script>
  <script type="text/javascript">
   $(document).ready(function() {
                 var loc = document.location;
                 var uri = {
                  spec: "http://cos.name/2009/07/studying-notes-on-oop-in-r/",
                  host: "http://cos.name",
                  prePath: "http://cos.name",
                  scheme: "http",
                  pathBase: "http://cos.name/"
                 };
    
                 var documentClone = document.cloneNode(true);
                 var article = new Readability(uri, documentClone).parse();
     
                 document.getElementById("xmain").innerHTML = article.content;
                });
  </script>
  <!-- 1466442887: Accept with keywords: (title(0.142857142857):门户网站,中,统计学,面向对象编程,服务平台,中国,方法, topn(0.3):结点,论坛,定义,子类,数据类型,信息,统计学,R语言,面向对象编程,数据挖掘,长度,型函数,面向对象,例子,参数,终端,计算,文章,类型,数据,节点,函数,对象,编程,实例,有时候,方法,列表,评论,虚类).-->
 </head>
 <body class="single single-post postid-1376 single-format-standard sidebar" onload="">
  <div class="header">
   <div class="container">
    <div class="row">
     <div class="col-xs-6 col-sm-6 text-left">
      <a href="/databee">
       <img src="http://nautidea-10007657.cos.myqcloud.com/logo_white.png"/>
      </a>
      <a href="/databee">
       <p>
        数螺
       </p>
      </a>
     </div>
     <div class="hidden-xs col-sm-6 text-right">
      <p>
       致力于数据科学的推广和知识传播
      </p>
     </div>
    </div>
   </div>
  </div>
  <div class="container text-center">
   <h1>
    HuRongxing: R中面向对象编程方法
   </h1>
  </div>
  <div class="container" id="xmain">
   <div class="hfeed site" id="page">
    <header class="site-header" id="masthead" role="banner">
     <div id="cos-logo">
      <a href="http://cos.name/">
       <img src="http://cos.name/wp-content/themes/COS-kermesinus/images/headers/cos-logo.png"/>
      </a>
     </div>
     <div class="navbar" id="navbar">
      <nav class="navigation main-navigation" id="site-navigation" role="navigation">
       <h3 class="menu-toggle">
        菜单
       </h3>
       <a class="screen-reader-text skip-link" href="http://cos.name/2009/07/studying-notes-on-oop-in-r/#content" title="跳至内容">
        跳至内容
       </a>
       <div class="menu-%e6%88%91%e7%9a%84%e8%8f%9c%e5%8d%95-container">
        <ul class="nav-menu" id="menu-%e6%88%91%e7%9a%84%e8%8f%9c%e5%8d%95">
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-4746" id="menu-item-4746">
          <a href="http://cos.name">
           主页
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-8120" id="menu-item-8120">
          <a href="http://cos.name/cn">
           论坛
          </a>
          <ul class="sub-menu">
           <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8124" id="menu-item-8124">
            <a href="http://cos.name/cn/wp-login.php?action=register">
             论坛注册
            </a>
           </li>
           <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8125" id="menu-item-8125">
            <a href="http://cos.name/cn/wp-login.php">
             论坛登录
            </a>
           </li>
          </ul>
         </li>
         <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8110" id="menu-item-8110">
          <a href="http://cos.name/books/">
           图书资料
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8112" id="menu-item-8112">
          <a href="http://cos.name/videos">
           视频教程
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8333" id="menu-item-8333">
          <a href="http://cos.name/salon/">
           统计沙龙
          </a>
         </li>
         <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8111" id="menu-item-8111">
          <a href="http://cos.name/chinar/">
           R语言会议
          </a>
         </li>
         <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8109" id="menu-item-8109">
          <a href="http://cos.name/training/">
           讲座与培训
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8115" id="menu-item-8115">
          <a href="http://cos.name/cn/forum/comprehensive/job/">
           招聘信息
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-4780" id="menu-item-4780">
          <a href="http://cos.name/about">
           关于我们
          </a>
          <ul class="sub-menu">
           <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8113" id="menu-item-8113">
            <a href="http://cos.name/2008/11/how-to-work-with-cos/">
             加入我们
            </a>
           </li>
           <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8119" id="menu-item-8119">
            <a href="http://cos.name/donate/">
             赞助我们
            </a>
           </li>
           <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8114" id="menu-item-8114">
            <a href="http://cos.name/cn/forum/26">
             项目合作
            </a>
           </li>
          </ul>
         </li>
        </ul>
       </div>
       <form action="http://cos.name/" class="search-form" method="get" role="search">
        <label>
         <span class="screen-reader-text">
          搜索：
         </span>
        </label>
       </form>
      </nav>
      <!-- #site-navigation -->
     </div>
     <!-- #navbar -->
    </header>
    <!-- #masthead -->
    <div class="site-main" id="main">
     <div class="content-area" id="primary">
      <div class="site-content" id="content" role="main">
       <article class="post-1376 post type-post status-publish format-standard hentry category-packages tag-r-language tag-s4 tag-269" id="post-1376">
        <header class="entry-header">
         <h1 class="entry-title">
          R中面向对象编程方法
         </h1>
         <div class="entry-meta">
          <span class="date">
           <a href="http://cos.name/2009/07/studying-notes-on-oop-in-r/" rel="bookmark" title="链向R中面向对象编程方法的固定链接">
            <time class="entry-date" datetime="2009-07-04T11:13:09+00:00">
             2009/07/04
            </time>
           </a>
          </span>
          <span class="categories-links">
           <a href="http://cos.name/category/software/packages/" rel="category tag">
            统计软件
           </a>
          </span>
          <span class="tags-links">
           <a href="http://cos.name/tag/r-language/" rel="tag">
            R语言
           </a>
           、
           <a href="http://cos.name/tag/s4/" rel="tag">
            S4
           </a>
           、
           <a href="http://cos.name/tag/%e9%9d%a2%e5%90%91%e5%af%b9%e8%b1%a1/" rel="tag">
            面向对象
           </a>
          </span>
          <span class="author vcard">
           <a class="url fn n" href="http://cos.name/author/bravebird/" rel="author" title="查看所有由胡荣兴发布的文章">
            胡荣兴
           </a>
          </span>
         </div>
         <!-- .entry-meta -->
        </header>
        <!-- .entry-header -->
        <div class="entry-content">
         <p>
          R主要面向统计计算，似乎很少会用到面向对象的编程方法。但在统计计算中，在下列情形中使用面向对象的编程方法可以编程更有效率。
          <br/>
          1）当需要用一种新的方式来表示数据，该方式与已有的数据类型有区别的时候。
          <br/>
          2）当需要一个新的函数，该函数可以根据不同的参数类型做出不同的反应的时候。
          <br/>
          在R中，经常需要定义一个新的函数，并且定义一个新的函数也是一项繁重的工作。相反，较少去定义一个新的类。但有时候定义一个类是一个很关键的步骤。一个类通常决定了如何对对象进行处理，决定了对象中应当包含什么样的信息。甚至有时候，类的定义决定你的项目的成败。(本文的PDF版本:
          <a href="http://cos.name/wp-content/uploads/2009/07/S4Method.pdf">
           R中的面象对象编程学习笔记
          </a>
          )
          <br/>
          <span id="more-1376">
          </span>
         </p>
         <h1>
          1. 旧的实现方法
         </h1>
         <p>
          R的
          <em>
           面向对象(OOP)
          </em>
          是基于
          <em>
           泛型函数(generic function)
          </em>
          的，而不是基于类层次结构。什么是R中的泛型函数？R中的面向对象是怎么样的呢？我们首先看下面来自
          <a href="http://www.ibm.com/developerworks/cn/linux/l-r3.html">
           使用R编写统计程序,第3部分:可重用和面向对象
          </a>
          中的一个实例。
         </p>
         <p>
          下面我们首先来创建一个泛型函数whoAmI( )
         </p>
         <pre class="brush: r"># 创建泛型函数
&gt; whoAmI &lt;- function(x, ...) UseMethod("whoAmI")
&gt; whoAmI.foo &lt;- function(x) print("I am a foo")
&gt; whoAmI.bar &lt;- function(x) print("I am a bar")
&gt; whoAmI.default &lt;- function(x) print("I don't know who I am")</pre>
         <p>
          在R中，每个对象都属于0个或1个或多个类，我们可以用class( )函数查看对象所属的类。
         </p>
         <pre class="brush: r">&gt; a = 1:10
&gt; b = 2:20
&gt; class(a)
[1] "integer"
&gt; class(b)
[1] "integer"</pre>
         <p>
          有了泛型函数和类之后，我们就可以看到R中的面泛型函数是如何工作的
         </p>
         <pre class="brush: r">&gt; whoAmI(a) # a的类为“integer”，没有为该类定义方法，
# 就执行whoAmI.default方法
[1] "I don't know who I am"
&gt; attr(a,'class') &lt;- 'foo' # 用attr( )函数将a的类指定为“foo”
&gt; class(a)
[1] "foo"
&gt; attr(b,'class')&lt;-c('baz','bam','bar') #指定b的属于三个类“baz”“bam”“bar”
&gt; class(b)
[1] "baz" "bam" "bar"
&gt; whoAmI(a) # 现在a属于“foo”类，执行whoAmI.foo( )
[1] "I am a foo"
&gt; whoAmI(b) # b虽然属于三个类，但只对“bar”类定义了
# 方法，所以就执行whoAmI.bar()
[1] "I am a bar"
&gt; attr(a,'class') &lt;- 'bar' # 改变a的类
&gt; class(a)
[1] "bar"
&gt; whoAmI(a)
[1] "I am a bar"</pre>
         <p>
          上面的例子中提到了一个对象同时属于多个类的情况，再看下面的一个补充实例。
         </p>
         <pre class="brush: r">&gt; meth1 &lt;- function(x) UseMethod("meth1")
&gt; meth1.Mom &lt;- function(x) print("Mom's meth1") # meth1对类“Mom”
&gt; meth1.Dad &lt;- function(x) print("Dad's meth1") # 和类“Dad”都定义了方法
&gt; meth2 &lt;- function(x) UseMethod("meth2") # meth2只对类
&gt; meth2.Dad &lt;- function(x) print("Dad's meth2") # “Dad”定义了方法
&gt; attr(a,'class') &lt;- c('Mom','Dad')
&gt; meth1(a) # 执行了meth1.Mom( ),因为Mom在前。
[1] "Mom's meth1"
&gt; meth2(a)
[1] "Dad's meth2"</pre>
         <p>
          包含祖先的一个例子。
         </p>
         <pre class="brush: r">#包含祖先
char0 = character(0)
makeMRO &lt;- function(classes = char0, parents = char0) {
    # Create a method resolution order from an optional
    # explicit list and an optional list of parents
    mro &lt;- c(classes)
    for (name in parents) {
        mro &lt;- c(mro, name)
        ancestors &lt;- attr(get(name), "class")
        mro &lt;- c(mro, ancestors[ancestors != name])
    }
    return(mro)
}
NewInstance &lt;- function(value = 0, classes = char0,
    parents = char0) {
    # Create a new object based on initial value,
    # explicit classes and parents (all optional)
    obj &lt;- value
    attr(obj, "class") &lt;- makeMRO(classes, parents)
    return(obj)
}
MaternalGrandma &lt;- NewInstance()
PaternalGrandma &lt;- NewInstance()
Mom &lt;- NewInstance(classes = "Mom", parents = "MaternalGrandma")
Dad &lt;- NewInstance(0, classes = c("Dad", "Uncle"),
    "PaternalGrandma")
Me &lt;- NewInstance(value = "Hello World", "Me", c("Mom",
    "Dad"))
&gt; print(Me)
[1] "Hello World"
attr(,"class")
[1] "Me" "Mom" "MaternalGrandma" "Dad"
[5] "Uncle" "PaternalGrandma"</pre>
         <p>
          从上面的例子，我们可以看到，R中的“面向对象”是以类和泛型函数为基础，类可以多重继承类，泛型函数可以分派到任意的参数（签名,signature）集合，泛型函数将不同的方法聚集到一起，由R根据函数的对象的类型来决定选择执行哪个方法。在某些情况下，类和方法是不同的概念，我样要区别对待。
         </p>
         <h1>
          2.类
         </h1>
         <p>
          用setClass来定义一个类。
         </p>
         <p>
          setClass(Class, representation, prototype, contains=character(),
         </p>
         <p>
          validity, access, where=1, version=FALSE)
         </p>
         <p>
          其中：
         </p>
         <table border="0" cellpadding="0" cellspacing="0">
          <tbody>
           <tr>
            <td valign="top" width="177">
             Class
            </td>
            <td valign="top" width="391">
             字符串，类的名称
            </td>
           </tr>
           <tr>
            <td valign="top" width="177">
             representation
            </td>
            <td valign="top" width="391">
             新的类的接口，或者该类扩展的其它类。通常是对representation函数的一个调用。
            </td>
           </tr>
           <tr>
            <td valign="top" width="177">
             prototype
            </td>
            <td valign="top" width="391">
             为接口提供的默认的数据对象。如果在构造一个新的类的时候，不明确地改写，那么新的实例将采用这些数据。
            </td>
           </tr>
           <tr>
            <td valign="top" width="177">
             contains
            </td>
            <td valign="top" width="391">
             该类所扩展的类，所有扩展的类的新的实例都会继承其所有父类的接口
            </td>
           </tr>
           <tr>
            <td valign="top" width="177">
             validity, access, version
            </td>
            <td valign="top" width="391">
             与S-Plus兼容的控制参数
            </td>
           </tr>
           <tr>
            <td valign="top" width="177">
             where
            </td>
            <td valign="top" width="391">
             存储或移除定义的元数据的环境
            </td>
           </tr>
          </tbody>
         </table>
         <p>
          定义了一个类后，就可以用函数new()来生成一个类的实例(instances)。类定义了一个对象的结构。类的实例代表了对象本身。一个子类是对其父类的扩展，一个新的类将包含其父类的所有接口。在创建一个新的类时，接口的名字不能重复（包括其直接或间接的父类）。下面的代码将创建两个类foo和bar，再创建它们的一个子类baz。
         </p>
         <pre class="brush: r">&gt; library(methods)
&gt; setClass("foo",representation(a="character",b="numeric"))
[1] "foo"
&gt; setClass("bar", representation(d = "numeric", c = "numeric"))
[1] "bar"
&gt; setClass("baz", contains = c("foo", "bar"))
[1] "baz"
&gt; getClass("baz")
Class "baz" [in ".GlobalEnv"]
Slots:
Name: a b d c
Class: character numeric numeric numeric
Extends: "foo", "bar"</pre>
         <p>
          现在我们可以生成类baz的一个实例。
         </p>
         <pre class="brush: r">&gt; x &lt;- new("baz", a = "xxx", b = 5, c = 10)
&gt; x
An object of class "baz"
Slot "a":
[1] "xxx"
Slot "b":
[1] 5
Slot "d":
numeric(0)
Slot "c":
[1] 10</pre>
         <p>
          可以通过操作符@访问接口中的数据。但最好的办法是不直接访问接口的数据，而是定义一些特殊的方法来访问这些数据。
         </p>
         <pre class="brush: r">&gt; x@a
[1] "xxx"</pre>
         <h1>
          3. 虚类
         </h1>
         <p>
          虚类就是不会用来生成实例的类。它们是用来将拥有不同的representations的类（它们不能互相继承）链接起来, 可以通过虚类为这些不同的representations提供相似的功能。一个标准的做法就是建立一个虚类，然后用其它类来扩展它。
         </p>
         <p>
          在实际中，可以通过以下几种不同的方式来使用该虚类。
         </p>
         <p>
          1. 虚类的方法将用到其所有的扩展类中。
         </p>
         <p>
          2. 新的类的接口将与虚类的接口的数据类型一致，这样可以使接口的多样化。
         </p>
         <p>
          3. 虚类的接口将会出现在它的所有扩展类中。
         </p>
         <p>
          下面我们用类来表示，一个树状图。一个树状图的结点有三个值：高度、左结点、右结点。终端结点与之不同，有一个高度和一个值（也有可能是另一个对象的实例。）我们可以用一个虚类dendNode来表示该结构。我们可以再定义两个该类的扩展类：终端和非终端结点。
         </p>
         <pre class="brush: r">&gt; setClass("dendNode")
[1] "dendNode"
&gt; setClass("dnode", representation(left = "dendNode", right = "dendNode",
+ height = "numeric"), contains = "dendNode")
[1] "dnode"
&gt; setClass("tnode", representation(height = "numeric", value = "numeric",
+ label = "character"), contains = "dendNode")
[1] "tnode"</pre>
         <p>
          现在我们就可以创建树了，它的结点或者是终端结点或者是非终端节点。在类dnode中，它的左节点和右节点都是dendNode类的实例，而dnode类本身又是dendNode的扩展。在此例中虚类被用来允许两个不同的类：左节点和右节点。这种设计使得可以重复使用树变得简单。
         </p>
         <p>
          在实际中，我们经常会出现这样的问题，希望一个接口或者是一个列表或者是一个空对象（NULL( )）。因为一个NULL( )本身不是一个列表，所以它们不能共享同一个接口。我们可以创建一个虚拟类来扩展列表类和NULL( )类。
         </p>
         <p>
          有两种方法可以建立虚类。第一种方法，与上面一样，用setClass( )建立一个没有representation的类。第二种方法，在参数representation中包括类“VIRTUAL”
         </p>
         <pre class="brush: r">&gt; setClass("myVclass", representation(a = "character", "VIRTUAL"))
[1] "myVclass"
&gt; getClass("myVclass")
Virtual Class "myVclass" [in ".GlobalEnv"]
Slots:
Name: a
Class: character</pre>
         <h1>
          4. 初始化和原型
         </h1>
         <p>
          有两种办法可以用来控制类的实例生成的对象的初始值。
         </p>
         <p>
          第一种方法：可以用参数prototype来控制生成的实例的值。使用该参数，可以将任何接口赋初值。
         </p>
         <pre class="brush: r">&gt; setClass("xx", representation(a = "numeric", b = "character"),
+ prototype(a = 3, b = "hi there"))
[1] "xx"
&gt; new("xx")
An object of class "xx"
Slot "a":
[1] 3
Slot "b":
[1] "hi there"</pre>
         <p>
          第二种方法是为该类指定一个initialize方法，用该方法为类的实例赋值。
         </p>
         <pre class="brush: r">&gt; setMethod("initialize", "xx", function(.Object, b)
+ {
+ .Object@b &lt;- b
+ .Object@a &lt;- nchar(b)
+ .Object
+ })
[1] "initialize"
&gt; new("xx", b = "yowser")
An object of class "xx"
Slot "a":
[1] 6
Slot "b":
[1] "yowser"</pre>
         <p>
          注意在第二种方法中，应当在initialize方法中返回该对象。
         </p>
         <h1>
          5. 泛型函数和方法
         </h1>
         <p>
          面向对象编程的一个重要方面就是泛型函数。泛型函数实际上就是一个分派机制。方法就是一种特殊的函数，它能根据特定的输入对象执行需要执行的任务。泛型函数的工作就是针对不同的输入参数决定什么样的方法被执行。一旦对泛型函数进行了签名，那么泛型函数就不能添加新的参数了。在设计泛型函数的参数时，要将可能用到的参数都包括进来。
         </p>
         <h1>
          6. 访问子函数
         </h1>
         <p>
          我们可以通过@运算符来访问接口，但在实际编程中并不建议这么做。我样可以通过访问子函数来访问接口。
         </p>
         <pre class="brush: r">&gt; setClass("foo", representation(a = "ANY")) #新建一个类foo
[1] "foo"
#申明一个标准的泛型函数a
&gt; if (!isGeneric("a")) {
    if (is.function("a"))
        fun &lt;- a
    else fun &lt;- function(object) standardGeneric("a")
    setGeneric("a", fun)
}
&gt; setMethod("a", "foo", function(object) object@a)
[1] "a"
&gt; b &lt;- new("foo", a = 10)
&gt; a(b)
[1] 10</pre>
         <p>
          R主要面向统计计算，似乎很少会用到面向对象的编程方法。但在统计计算中，在下列情形中使用面向对象的编程方法可以编程更有效率。
         </p>
         <p>
          1）当需要用一种新的方式来表示数据，该方式与已有的数据类型有区别的时候。
         </p>
         <p>
          2）当需要一个新的函数，该函数可以根据不同的参数类型做出不同的反应的时候。
         </p>
         <p>
          在R中，经常需要定义一个新的函数，并且定义一个新的函数也是一项繁重的工作。相反，较少去定义一个新的类。但有时候定义一个类是一个很关键的步骤。一个类通常决定了如何对对象进行处理，决定了对象中应当包含什么样的信息。甚至有时候，类的定义决定你的项目的成败。
         </p>
         <p>
          我们来看下面的一个例子。在该例中，我们将定义一个名为whatIs( )的函数，该函数返回对象的类型。
         </p>
         <pre class="brush: r">&gt; whatIs &lt;- function(object) data.class(object)
&gt; whatIs(1:10)
[1] "numeric"
&gt; whatIs(matrix())
[1] "matrix"
&gt; whatIs(whatIs)
[1] "function"</pre>
         <p>
          上面的程序好像太简单，我们还可以打印出对象的长度。
         </p>
         <pre class="brush: r">&gt; whatIs &lt;- function(object) cat("类：",
+ data.class(object),"\n长度：",length(object),"\n")
&gt; whatIs(1:10)
类： numeric
长度： 10
&gt; whatIs(matrix())
类： matrix
长度： 1
&gt; whatIs(whatIs)
类： function
长度： 1
&gt; A&lt;-matrix(1:6,c(2,3))
&gt; A
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
&gt; whatIs(A)
类： matrix
长度： 6</pre>
         <p>
          现在看来，又改进了一步，但是还是有点不尽如人意的地方，这里给出了函数的长度，意义不大。对于矩阵，我们更想知道它的行数和列数。所以我们需要为function类和matrix类单独定义函数，才能得到我们期望的信息：
         </p>
         <pre class="brush: r">&gt; whatIs.function &lt;- function(object) cat("类：",
+ data.class(object),"\n")
&gt; whatIs.function(whatIs)
类： function
&gt; whatIs.matrix &lt;- function(object) cat("类：",
+ data.class(object),"\n",nrow(object),"行",ncol(object),"列\n")
&gt; whatIs.matrix(A)
类： matrix
2 行 3 列</pre>
         <h1>
          7. 定义方法
         </h1>
         <p>
          在上面的例子中，为了得到我们想要的信息，我们定义了三个功能类似的函数，这样程序比较散乱，使用起来也比较繁琐。我们希望通过一个统一的函数名whatIs( )来代表上述三个函数，然后根据输入的参数的类型(function, matrix或其它)来决定使用哪一个函数(whatIs.function( ), whatIs.function( )或whatIs( ) )。要完成该工作，我们可以使用函数setMethod( )。
         </p>
         <pre class="brush: r">&gt; setMethod("whatIs","function", whatIs.function)
用函数"whatIs"来建立新的同屬函数
[1] "whatIs"
&gt; setMethod("whatIs","matrix", whatIs.matrix)
[1] "whatIs"
&gt; whatIs(1:10)
类： numeric
长度： 10
&gt; whatIs(whatIs)
类： standardGeneric
&gt; whatIs(A)
类： matrix
2 行 3 列</pre>
         <p>
          现在我们看到，我们只用一个函数whatIs( )就可以根据参数的类型执行不同的程序代码。这里的函数whatIs( )我们称之为泛型函数（上面的输出显示为“standardGeneric”），分别针对不同类型的对象的三个不同的程序功能称为方法（method）。
         </p>
         <p>
          setMethod( )函数的三个参数分别告诉setMethod对什么泛型函数指定方法，执行该方法对应的参数的类型，执行的方法。其中第二项称为签名（signature）。
         </p>
         <p>
          showMethods( ) 查看为函数函数定义了哪些方法。
         </p>
         <p>
          dumpMethod( ) 提取为泛型函数的某个方法。
         </p>
         <h4>
          <p name="_附录1_R中的基本类">
          </p>
          附录: R中的基本类
         </h4>
         <pre class="brush: r">### The following are all basic vector classes.
### They can appear as class names in method signatures,
### in calls to as(), is(), and new().
"character"
"complex"
"double"
"expression"
"integer"
"list"
"logical"
"numeric"
"single"
"raw"
### the class
"vector"
### is a virtual class, extended by all the above
### The following are additional basic classes
"NULL" # NULL objects
"function" # function objects, including primitives
"externalptr" # raw external pointers for use in C code
"ANY" # virtual classes used by the methods package itself
"VIRTUAL"
"missing"
## The following class names can appear in method signatures,
## as the class in as() and is() expressions, and, except for
## the classes commented as VIRTUAL, in calls to new()
"matrix"
"array"
"ts"
"structure" ## VIRTUAL
The specific classes all extend class "structure", directly, and class "vector", by class "structure".</pre>
         <p>
          （由于不习惯在网站上编辑，更多内容请查看：
          <a href="http://cos.name/wp-content/uploads/2009/07/S4Method.pdf">
           R中的面象对象编程学习笔记
          </a>
          )
         </p>
         <div class="wumii-hook">
          <br/>
          <br/>
         </div>
        </div>
        <!-- .entry-content -->
        <footer class="entry-meta">
        </footer>
        <!-- .entry-meta -->
       </article>
       <!-- #post -->
       <nav class="navigation post-navigation" role="navigation">
        <h1 class="screen-reader-text">
         文章导航
        </h1>
        <div class="nav-links">
         <a href="http://cos.name/2009/07/drawing-china-map-using-r/" rel="prev">
          <span class="meta-nav">
           ←
          </span>
          用R软件绘制中国分省市地图
         </a>
         <a href="http://cos.name/2009/07/maximum-likelihood-estimation-in-r/" rel="next">
          R中的极大似然估计
          <span class="meta-nav">
           →
          </span>
         </a>
        </div>
        <!-- .nav-links -->
       </nav>
       <!-- .navigation -->
       <div class="comments-area" id="comments">
        <h2 class="comments-title">
         《
         <span>
          R中面向对象编程方法
         </span>
         》有8个想法
        </h2>
        <ol class="comment-list">
         <li class="comment byuser comment-author-bravebird bypostauthor even thread-even depth-1" id="comment-746">
          <article class="comment-body" id="div-comment-746">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/38f7c5642642d9f7c98743d39e4863bd?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              <a class="url" href="http://a-lucky-bird.spaces.live.com/" rel="external nofollow">
               胡荣兴
              </a>
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/07/studying-notes-on-oop-in-r/#comment-746">
              <time datetime="2009-07-04T11:27:18+00:00">
               2009/07/04 11:27
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             这段时间都没有来COS了，上面更新了好多巨著都没有时间看,以后估计时间会更少，太懒了，得学会好好利用时间。
             <br/>
             用网页发布文章始终不爽。
             <br/>
             有没有学微观计量经济学的朋友啊?可以联系我，有问题向各路高手请教。
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给胡荣兴" class="comment-reply-link" href="http://cos.name/2009/07/studying-notes-on-oop-in-r/?replytocom=746#respond" onclick='return addComment.moveForm( "div-comment-746", "746", "respond", "1376" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
         </li>
         <!-- #comment-## -->
         <li class="comment byuser comment-author-yixuanq odd alt thread-odd thread-alt depth-1" id="comment-747">
          <article class="comment-body" id="div-comment-747">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/f09663fd5fc04bad5e5b09daddb86fe6?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              邱怡轩
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/07/studying-notes-on-oop-in-r/#comment-747">
              <time datetime="2009-07-04T14:17:41+00:00">
               2009/07/04 14:17
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             之前确实没有注意过这些，学习了！
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给邱怡轩" class="comment-reply-link" href="http://cos.name/2009/07/studying-notes-on-oop-in-r/?replytocom=747#respond" onclick='return addComment.moveForm( "div-comment-747", "747", "respond", "1376" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
         </li>
         <!-- #comment-## -->
         <li class="comment even thread-even depth-1" id="comment-760">
          <article class="comment-body" id="div-comment-760">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/ed2c16bda7654c8f5e05682f6201d17e?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              <a class="url" href="http://hi.baidu.com/luansheng1229" rel="external nofollow">
               栾生
              </a>
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/07/studying-notes-on-oop-in-r/#comment-760">
              <time datetime="2009-07-07T09:15:03+00:00">
               2009/07/07 09:15
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             太棒了，这正是我需要的。还有上一篇的制作地图，也很爽。都是好文章啊！
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给栾生" class="comment-reply-link" href="http://cos.name/2009/07/studying-notes-on-oop-in-r/?replytocom=760#respond" onclick='return addComment.moveForm( "div-comment-760", "760", "respond", "1376" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
         </li>
         <!-- #comment-## -->
         <li class="comment odd alt thread-odd thread-alt depth-1 parent" id="comment-831">
          <article class="comment-body" id="div-comment-831">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/ac3199fd3e55110a6c7169cdfb0d150f?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              zhangwx
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/07/studying-notes-on-oop-in-r/#comment-831">
              <time datetime="2009-09-09T17:53:10+00:00">
               2009/09/09 17:53
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             请问R的底层是用什么语言写的？
             <br/>
             C++吗
             <br/>
             ？
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给zhangwx" class="comment-reply-link" href="http://cos.name/2009/07/studying-notes-on-oop-in-r/?replytocom=831#respond" onclick='return addComment.moveForm( "div-comment-831", "831", "respond", "1376" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
          <ol class="children">
           <li class="comment byuser comment-author-yihui even depth-2" id="comment-833">
            <article class="comment-body" id="div-comment-833">
             <footer class="comment-meta">
              <div class="comment-author vcard">
               <img src="http://sdn.geekzu.org/avatar/1022d8e6ebc94e8f6bca9a86cebe312a?s=74&amp;d=monsterid&amp;r=g"/>
               <b class="fn">
                <a class="url" href="http://www.yihui.name" rel="external nofollow">
                 谢益辉
                </a>
               </b>
               <span class="says">
                说道：
               </span>
              </div>
              <!-- .comment-author -->
              <div class="comment-metadata">
               <a href="http://cos.name/2009/07/studying-notes-on-oop-in-r/#comment-833">
                <time datetime="2009-09-10T04:52:12+00:00">
                 2009/09/10 04:52
                </time>
               </a>
              </div>
              <!-- .comment-metadata -->
             </footer>
             <!-- .comment-meta -->
             <div class="comment-content">
              <p>
               你用R分析一下R的源代码就知道了，R主要是用R写的（这句话看起来很崩溃？），加上一部分C语言，外加少量的Fortran以及其它语言：
              </p>
              <pre class="brush: r"># 分析R源文件的扩展名（本方法可能不精确！）
&gt; x = list.files('R-2.9.2/',recursive = TRUE)
# 正则表达式：去掉不含.的文件名，将*.替换为空，剩下的是扩展名
&gt; sort(table(gsub('.*\\.','',x[grep('\\.',x)])))

       3       ac      aux      bat      bib 
       1        1        1        1        1 
     bot  charset   common      dat      dif 
       1        1        1        1        1 
     doc      ftn       fw    guess      ico 
       1        1        1        1        1 
 install     jpeg      LIB        m   modreg 
       1        1        1        1        1 
   notes packages  portsrc      rej      Rnw 
       1        1        1        1        1 
   rpath    Rterm    rtest      rtf      stp 
       1        1        1        1        1 
     sub     tiff      top       ts     unix 
       1        1        1        1        1 
 windows       zi      zip        0        1 
       1        1        1        2        2 
     bmp      csv       db   header     hide 
       2        2        2        2        2 
     Rin        S      sed      sin     site 
       2        2        2        2        2 
     tex        y manifest      rda      sty 
       2        2        3        3        3 
     css      isl      Rd~      def       fd 
       4        4        4        5        5 
     jpg       R~       sh      eps      tab 
       5        5        5        6        6 
    java       mk      txt    class       pl 
       7        7        7        8        8 
      pm       rc     texi      tcl       gz 
      10       10       10       11       12 
     tgz       m4      Snw     html      enc 
      12       13       13       14       18 
     pdf      pot      gmo     save        f 
      19       20       23       42       45 
     win      afm       in       mo        h 
      45       87       97      149      167 
      po        c        R       Rd 
     170      511      718     1276 </pre>
              <p>
               其中Rd是R的帮助文档源文件，如果我没记错的话，po、mo和pot是语言文件。
              </p>
             </div>
             <!-- .comment-content -->
             <div class="reply">
              <a aria-label="回复给谢益辉" class="comment-reply-link" href="http://cos.name/2009/07/studying-notes-on-oop-in-r/?replytocom=833#respond" onclick='return addComment.moveForm( "div-comment-833", "833", "respond", "1376" )' rel="nofollow">
               回复
              </a>
             </div>
            </article>
            <!-- .comment-body -->
           </li>
           <!-- #comment-## -->
          </ol>
          <!-- .children -->
         </li>
         <!-- #comment-## -->
         <li class="comment odd alt thread-even depth-1" id="comment-863">
          <article class="comment-body" id="div-comment-863">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/ac3199fd3e55110a6c7169cdfb0d150f?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              zhangwx
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/07/studying-notes-on-oop-in-r/#comment-863">
              <time datetime="2009-09-21T19:59:40+00:00">
               2009/09/21 19:59
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             非常感谢！平时工作忙，回复的时间比较晚。
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给zhangwx" class="comment-reply-link" href="http://cos.name/2009/07/studying-notes-on-oop-in-r/?replytocom=863#respond" onclick='return addComment.moveForm( "div-comment-863", "863", "respond", "1376" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
         </li>
         <!-- #comment-## -->
         <li class="comment even thread-odd thread-alt depth-1" id="comment-5148">
          <article class="comment-body" id="div-comment-5148">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/ff4d941c590e705ce96ea3507031bf53?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              xxw
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/07/studying-notes-on-oop-in-r/#comment-5148">
              <time datetime="2013-12-03T16:43:45+00:00">
               2013/12/03 16:43
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             学习了！
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给xxw" class="comment-reply-link" href="http://cos.name/2009/07/studying-notes-on-oop-in-r/?replytocom=5148#respond" onclick='return addComment.moveForm( "div-comment-5148", "5148", "respond", "1376" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
         </li>
         <!-- #comment-## -->
         <li class="comment odd alt thread-even depth-1" id="comment-5897">
          <article class="comment-body" id="div-comment-5897">
           <footer class="comment-meta">
            <div class="comment-author vcard">
             <img src="http://sdn.geekzu.org/avatar/?s=74&amp;d=monsterid&amp;r=g"/>
             <b class="fn">
              <a class="url" href="http://weibo.com/5121180322" rel="external nofollow">
               因你而在_89757
              </a>
             </b>
             <span class="says">
              说道：
             </span>
            </div>
            <!-- .comment-author -->
            <div class="comment-metadata">
             <a href="http://cos.name/2009/07/studying-notes-on-oop-in-r/#comment-5897">
              <time datetime="2014-06-14T18:32:19+00:00">
               2014/06/14 18:32
              </time>
             </a>
            </div>
            <!-- .comment-metadata -->
           </footer>
           <!-- .comment-meta -->
           <div class="comment-content">
            <p>
             泛型函数
            </p>
           </div>
           <!-- .comment-content -->
           <div class="reply">
            <a aria-label="回复给因你而在_89757" class="comment-reply-link" href="http://cos.name/2009/07/studying-notes-on-oop-in-r/?replytocom=5897#respond" onclick='return addComment.moveForm( "div-comment-5897", "5897", "respond", "1376" )' rel="nofollow">
             回复
            </a>
           </div>
          </article>
          <!-- .comment-body -->
         </li>
         <!-- #comment-## -->
        </ol>
        <!-- .comment-list -->
        <div class="comment-respond" id="respond">
         <h3 class="comment-reply-title" id="reply-title">
          发表评论
          <small>
           <a href="http://cos.name/2009/07/studying-notes-on-oop-in-r/#respond" id="cancel-comment-reply-link" rel="nofollow" style="display:none;">
            取消回复
           </a>
          </small>
         </h3>
         <form action="http://cos.name/wp-comments-post.php" class="comment-form" id="commentform" method="post" novalidate="">
          <p class="comment-notes">
           <span id="email-notes">
            电子邮件地址不会被公开。
           </span>
           必填项已用
           <span class="required">
            *
           </span>
           标注
          </p>
          <p class="comment-form-comment">
           <label for="comment">
            评论
           </label>
           <textarea aria-required="true" cols="45" id="comment" maxlength="65525" name="comment" required="required" rows="8">
           </textarea>
          </p>
          <p class="comment-form-author">
           <label for="author">
            姓名
            <span class="required">
             *
            </span>
           </label>
          </p>
          <p class="comment-form-email">
           <label for="email">
            电子邮件
            <span class="required">
             *
            </span>
           </label>
          </p>
          <p class="comment-form-url">
           <label for="url">
            站点
           </label>
          </p>
          <p class="form-submit">
          </p>
          <p style="display: none;">
          </p>
          <p style="display: none;">
          </p>
         </form>
        </div>
        <!-- #respond -->
       </div>
       <!-- #comments -->
      </div>
      <!-- #content -->
     </div>
     <!-- #primary -->
     <div class="sidebar-container" id="tertiary" role="complementary">
      <div class="sidebar-inner">
       <div class="widget-area">
        <aside class="widget widget_text" id="text-3">
         <h3 class="widget-title">
          关注统计之都
         </h3>
         <div class="textwidget">
          <ul>
           <li>
            新浪微博
            <a href="http://weibo.com/cosname">
             @统计之都
            </a>
           </li>
           <li>
            人人网
            <a href="http://renren.com/cosname">
             @统计之都
            </a>
           </li>
           <li>
            Twitter
            <a href="http://twitter.com/cos_name">
             @cos_name
            </a>
           </li>
          </ul>
         </div>
        </aside>
        <aside class="widget widget_text" id="text-6">
         <h3 class="widget-title">
          微信公众平台
         </h3>
         <div class="textwidget">
          <img src="http://cos.name/wp-content/uploads/2013/04/qrcode-8cm.jpg"/>
          <p style="font-size:12px;margin-left:15px">
           微信号 CapStat
          </p>
          <p>
           我们将第一时间向您推送主站和论坛的精彩内容，以及统计之都的线下活动、竞赛、培训和会议信息。
          </p>
         </div>
        </aside>
        <aside class="widget widget_text" id="text-8">
         <h3 class="widget-title">
          站内导航
         </h3>
         <div class="textwidget">
          <ul>
           <li class="page_item">
            <a href="http://cos.name/cn/">
             中文论坛
            </a>
           </li>
           <li class="page_item">
            <a href="http://cos.name/videos/">
             视频
            </a>
           </li>
           <li class="page_item">
            <a href="http://cos.name/salon/">
             统计沙龙
            </a>
           </li>
           <li class="page_item">
            <a href="http://cos.name/books/">
             图书出版
            </a>
           </li>
           <li class="page_item">
            <a href="http://cos.name/training/">
             教育培训
            </a>
           </li>
           <li class="page_item">
            <a href="http://cos.name/about/">
             关于我们
            </a>
           </li>
           <li class="page_item">
            <a href="http://cos.name/donate/">
             捐赠
            </a>
           </li>
           <li class="page_item">
            <a href="http://cos.name/chinar/">
             R语言会议
            </a>
           </li>
          </ul>
         </div>
        </aside>
        <aside class="widget widget_links" id="linkcat-2">
         <h3 class="widget-title">
          友情链接
         </h3>
         <ul class="xoxo blogroll">
          <li>
           <a href="http://stat.ruc.edu.cn" target="_blank" title="中国人民大学统计学院网站">
            中国人民大学统计学院
           </a>
          </li>
          <li>
           <a href="http://rucdmc.net">
            中国人民大学数据挖掘中心
           </a>
          </li>
          <li>
           <a href="http://birc.gsm.pku.edu.cn/" target="_blank">
            北京大学商务智能研究中心
           </a>
          </li>
          <li>
           <a href="http://sam.cufe.edu.cn/" target="_blank" title="中央财经大学统计与数学学院网站">
            中央财经大学统计与数学学院
           </a>
          </li>
          <li>
           <a href="http://tjx.cueb.edu.cn/" target="_blank" title="首都经济贸易大学统计学院网站">
            首经贸统计学院
           </a>
          </li>
          <li>
           <a href="http://www.shookr.com/">
            数客网大数据社区
           </a>
          </li>
          <li>
           <a href="http://www.xueqing.tv/" target="_blank" title="数据科学在线学习平台">
            雪晴数据网
           </a>
          </li>
          <li>
           <a href="http://iera.name/" target="_blank" title="IERA是一个旨在普及、传播和增进工业工程知识的非营利性网站">
            IERA（直通IE）
           </a>
          </li>
         </ul>
        </aside>
        <aside class="widget widget_categories" id="categories-2">
         <h3 class="widget-title">
          全部分类
         </h3>
         <label class="screen-reader-text" for="cat">
          全部分类
         </label>
         <select class="postform" id="cat" name="cat">
          <option value="-1">
           选择分类目录
          </option>
          <option class="level-0" value="925">
           cos访谈  (4)
          </option>
          <option class="level-0" value="659">
           图书出版  (5)
          </option>
          <option class="level-0" value="379">
           数学方法  (14)
          </option>
          <option class="level-1" value="381">
           分析与代数  (1)
          </option>
          <option class="level-1" value="380">
           概率论  (9)
          </option>
          <option class="level-1" value="382">
           随机过程  (5)
          </option>
          <option class="level-0" value="210">
           数据分析  (81)
          </option>
          <option class="level-1" value="203">
           多元统计  (3)
          </option>
          <option class="level-1" value="42">
           数据挖掘与机器学习  (42)
          </option>
          <option class="level-1" value="36">
           生物与医学统计  (17)
          </option>
          <option class="level-1" value="35">
           计量经济学  (4)
          </option>
          <option class="level-1" value="296">
           金融统计  (3)
          </option>
          <option class="level-1" value="303">
           风险精算  (7)
          </option>
          <option class="level-0" value="177">
           模型专题  (15)
          </option>
          <option class="level-1" value="38">
           回归分析  (10)
          </option>
          <option class="level-1" value="41">
           时间序列  (2)
          </option>
          <option class="level-0" value="784">
           每周精选  (24)
          </option>
          <option class="level-1" value="183">
           可视化  (9)
          </option>
          <option class="level-0" value="967">
           沙龙纪要  (3)
          </option>
          <option class="level-0" value="18">
           经典理论  (46)
          </option>
          <option class="level-1" value="37">
           抽样调查  (3)
          </option>
          <option class="level-1" value="4">
           统计推断  (26)
          </option>
          <option class="level-1" value="236">
           试验设计  (7)
          </option>
          <option class="level-1" value="39">
           非参数统计  (3)
          </option>
          <option class="level-0" value="1">
           统计之都  (279)
          </option>
          <option class="level-1" value="884">
           中国R会议  (2)
          </option>
          <option class="level-1" value="885">
           中国R语言会议  (5)
          </option>
          <option class="level-1" value="446">
           出国留学  (3)
          </option>
          <option class="level-1" value="179">
           推荐文章  (90)
          </option>
          <option class="level-1" value="3">
           新闻通知  (75)
          </option>
          <option class="level-1" value="263">
           统计刊物  (10)
          </option>
          <option class="level-1" value="174">
           网站导读  (40)
          </option>
          <option class="level-1" value="204">
           职业事业  (51)
          </option>
          <option class="level-1" value="213">
           高校课堂  (9)
          </option>
          <option class="level-0" value="178">
           统计计算  (28)
          </option>
          <option class="level-1" value="40">
           优化与模拟  (15)
          </option>
          <option class="level-1" value="43">
           贝叶斯方法  (6)
          </option>
          <option class="level-0" value="378">
           软件应用  (116)
          </option>
          <option class="level-1" value="44">
           统计图形  (36)
          </option>
          <option class="level-1" value="110">
           统计软件  (83)
          </option>
         </select>
        </aside>
        <aside class="widget widget_recent_comments" id="recent-comments-2">
         <h3 class="widget-title">
          最新评论
         </h3>
         <ul id="recentcomments">
          <li class="recentcomments">
           <span class="comment-author-link">
            fineboom
           </span>
           发表在《
           <a href="http://cos.name/2016/06/use-shiny-fleetly-set-up-visual-prototype-system/#comment-7317">
            利用shiny包快速搭建可视化原型系统
           </a>
           》
          </li>
          <li class="recentcomments">
           <span class="comment-author-link">
            胡家新
           </span>
           发表在《
           <a href="http://cos.name/2016/06/r%e8%af%ad%e5%8d%83%e5%af%bb%e7%ac%ac%e4%b8%89%e6%9c%9f%ef%bc%9a%e5%bc%a0%e6%97%a0%e5%bf%8c%e7%a9%b6%e7%ab%9f%e7%88%b1%e8%b0%81%ef%bc%9f/#comment-7316">
            R语千寻第三期：张无忌究竟爱谁？
           </a>
           》
          </li>
          <li class="recentcomments">
           <span class="comment-author-link">
            <a class="url" href="http://www.zijiacha.com/category.php?id=6" rel="external nofollow">
             南糯山普洱茶
            </a>
           </span>
           发表在《
           <a href="http://cos.name/2016/06/r%e8%af%ad%e5%8d%83%e5%af%bb%e7%ac%ac%e4%b8%89%e6%9c%9f%ef%bc%9a%e5%bc%a0%e6%97%a0%e5%bf%8c%e7%a9%b6%e7%ab%9f%e7%88%b1%e8%b0%81%ef%bc%9f/#comment-7315">
            R语千寻第三期：张无忌究竟爱谁？
           </a>
           》
          </li>
          <li class="recentcomments">
           <span class="comment-author-link">
            J
           </span>
           发表在《
           <a href="http://cos.name/2016/05/value-of-the-reputation-from-the-data/#comment-7314">
            数据告诉你：高信誉的卖家应该收高价，还是收低价？
           </a>
           》
          </li>
          <li class="recentcomments">
           <span class="comment-author-link">
            <a class="url" href="http://gg" rel="external nofollow">
             Hilda
            </a>
           </span>
           发表在《
           <a href="http://cos.name/2013/01/drawing-map-in-r-era/#comment-7311">
            R时代，你要怎样画地图？
           </a>
           》
          </li>
         </ul>
        </aside>
        <aside class="widget widget_rss" id="rss-282869971">
         <h3 class="widget-title">
          <a class="rsswidget" href="http://cos.name/cn/topics/feed/">
           <img src="http://cos.name/wp-includes/images/rss.png"/>
          </a>
          <a class="rsswidget" href="http://cos.name/cn/topics/feed/">
           中文论坛新帖
          </a>
         </h3>
         <ul>
          <li>
           <a class="rsswidget" href="http://cos.name/cn/topic/417372/">
            处理时间数据和产生时间序列的问题
           </a>
          </li>
          <li>
           <a class="rsswidget" href="http://cos.name/cn/topic/6790/">
            《统计陷阱》下载 （How to lie with statistics）
           </a>
          </li>
          <li>
           <a class="rsswidget" href="http://cos.name/cn/topic/818/">
            统计学的世界（第五版）
           </a>
          </li>
          <li>
           <a class="rsswidget" href="http://cos.name/cn/topic/16574/">
            class(x) 返回值值是AsIs,AsIs代表什么，有什么用处？
           </a>
          </li>
          <li>
           <a class="rsswidget" href="http://cos.name/cn/topic/417366/">
            如何用R绘制一个分类算法的决策规则
           </a>
          </li>
         </ul>
        </aside>
        <aside class="widget widget_text" id="text-2">
         <h3 class="widget-title">
          登录/RSS
         </h3>
         <div class="textwidget">
          <ul>
           <li>
            <a href="http://cos.name/wp-admin/">
             登录
            </a>
           </li>
           <li>
            <a href="http://cos.name/feed/" title="使用 RSS 2.0 同步站点内容">
             文章
             <abbr title="Really Simple Syndication">
              RSS
             </abbr>
            </a>
           </li>
           <li>
            <a href="http://cos.name/comments/feed/" title="RSS 上的最近评论">
             评论
             <abbr title="Really Simple Syndication">
              RSS
             </abbr>
            </a>
           </li>
          </ul>
         </div>
        </aside>
       </div>
       <!-- .widget-area -->
      </div>
      <!-- .sidebar-inner -->
     </div>
     <!-- #tertiary -->
    </div>
    <!-- #main -->
    <footer class="site-footer" id="colophon" role="contentinfo">
     <div class="site-info">
      版权所有 © 2014 统计之都 | 由
      <a href="http://wordpress.org/">
       WordPress
      </a>
      构建 | 主题修改自
      <a href="http://wordpress.org/themes/twentythirteen">
       Twenty Thirteen
      </a>
     </div>
     <!-- .site-info -->
    </footer>
    <!-- #colophon -->
   </div>
   <!-- #page -->
   <p style="margin:0;padding:0;height:1px;overflow:hidden;">
    <a href="http://www.wumii.com/widget/relatedItems" style="border:0;">
     <img src="http://static.wumii.cn/images/pixel.png"/>
    </a>
   </p>
  </div>
 </body>
</html>